home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ABUSESRC.ZIP / AbuseSrc / macabuse / imlib / sprite.c < prev    next >
C/C++ Source or Header  |  1997-05-20  |  2KB  |  76 lines

  1. #include "macs.hpp"
  2. #include "mdlread.hpp"
  3. #include "video.hpp"
  4. #include "image.hpp"
  5. #include "palette.hpp"
  6. #include "linked.hpp"
  7. #include <math.h>
  8. #include "glread.hpp"
  9. #include "gifread.hpp"
  10. #include "ppmread.hpp"
  11. #include "emm.hpp"
  12. #include "sprite.hpp"
  13.  
  14. extern image *screen;
  15.  
  16. void sprite::restore_background()
  17. { if (x+save->width()>=0 && y+save->height()>=0 && x<=xres && y<=yres)
  18.       save->put_image(screen,x,y); }
  19.  
  20. void sprite::get_background() 
  21. { if (x+visual->width()>=0 && y+visual->height()>=0 && x<=xres && y<=yres)
  22.    screen->put_part(save,0,0,x,y,x+save->width()-1,y+save->height()-1); }
  23.  
  24. void sprite::draw()
  25. { if (x+visual->width()>=0 && y+visual->height()>=0 && x<=xres && y<=yres)
  26.    visual->put_image(screen,x,y,1); }
  27.  
  28. sprite::sprite(image *Screen, image *Visual, int X, int Y)
  29. {
  30.   CHECK(Visual && Screen);
  31.   x=X; y=Y; visual=Visual;
  32.   save=new image(visual->width(),visual->height());
  33.   get_background();
  34. } ;
  35.  
  36. sprite::~sprite()
  37. {
  38.   delete save;  
  39. }
  40.  
  41. void sprite_controller::add_sprite(sprite *sp)
  42. { sprites.add_end((linked_node *)sp); }
  43.  
  44. void sprite_controller::remove_sprites()
  45. { sprite *sp; loopt(sprite,sp,sprites.first(),sp->restore_background();); }
  46.  
  47. void sprite_controller::put_sprites()
  48. { sprite *sp; loopt(sprite,sp,sprites.first(),sp->draw();); }
  49.  
  50. void sprite_controller::get_backgrounds()
  51. { sprite *sp; loopt(sprite,sp,sprites.first(),sp->get_background();); }
  52.  
  53. void sprite::change_visual(image *Visual, int delete_old)
  54. { if (delete_old)
  55.     delete visual;
  56.   visual=Visual;
  57.   if (save->width()!=Visual->width() || save->height()!=Visual->height())
  58.   {
  59.     delete save;
  60.     save=new image(visual->width(),visual->height());
  61.   }
  62.   get_background();
  63. }
  64.  
  65. void sprite_controller::bring_front(sprite *sp)
  66. {
  67.   ERROR(sprites.unlink((linked_node *)sp),"unlink failure");
  68.   sprites.add_end((linked_node *)sp);
  69. }
  70.  
  71. void sprite_controller::delete_sprite(sprite *sp)
  72. {
  73.   ERROR(sprites.unlink((linked_node *)sp),"unlink failure");
  74.   delete sp;
  75. }
  76.